/**
 * 
 */
package com.mbengue.corp.apr.ra.dao.impl;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import com.mbengue.corp.apr.ra.core.Adresse;
import com.mbengue.corp.apr.ra.dao.AdresseDao;
import com.mbengue.corp.apr.ra.util.HibernateUtil;

/**
 * @author MMB11447
 *
 */
public class AdresseDaoImpl implements Serializable, AdresseDao {
	
	private static final long serialVersionUID = 1L;
	
	private Session session;
	
	public AdresseDaoImpl() {
		session = HibernateUtil.getSessionFactory();
	}

	/* (non-Javadoc)
	 * @see com.mbengue.corp.apr.ra.dao.AdresseDao#ajouterAdresse(com.mbengue.corp.apr.ra.core.Adresse)
	 */
	/*public void ajouterAdresse(Adresse adresse) throws HibernateException {
		Transaction transaction = session.beginTransaction();
		try {
			session.save(adresse);
			transaction.commit();
		} catch (Exception e) {
			transaction.rollback();
			throw new HibernateException(e);
		} finally {
			session.flush();
			session.close();
		}
	}*/

	/* (non-Javadoc)
	 * @see com.mbengue.corp.apr.ra.dao.AdresseDao#trouverAdresse(long)
	 */
	public Adresse trouverAdresse(long idAdresse) {
		// TODO Auto-generated method stub
		return null;
	}

	/* (non-Javadoc)
	 * @see com.mbengue.corp.apr.ra.dao.AdresseDao#trouverAdresseParCP(java.lang.String)
	 */
	public List<Adresse> trouverAdresseParCP(String codePostal) {
		// TODO Auto-generated method stub
		return null;
	}

	public void ajouter(Adresse objet) throws HibernateException {
		Transaction transaction = session.beginTransaction();
		try {
			session.save(objet);
			transaction.commit();
		} catch (Exception e) {
			transaction.rollback();
			throw new HibernateException(e);
		} finally {
			session.flush();
			session.close();
		}
	}

	public Adresse modifier(Adresse objet) throws HibernateException {
		// TODO Auto-generated method stub
		return null;
	}

	public void supprimer(Adresse objet) throws HibernateException {
		session.delete(objet);
		session.getTransaction().commit();
	}

	public Adresse trouver(Long key) throws HibernateException {
		Criteria criteria = session.createCriteria(Adresse.class);
		criteria.add(Restrictions.eq("id", key));
		
		return (Adresse) criteria.uniqueResult();
	}

}
